layout.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { notFound } from 'next/navigation';
  2. import { Locale, hasLocale, NextIntlClientProvider } from 'next-intl';
  3. import { getTranslations, setRequestLocale } from 'next-intl/server';
  4. import { clsx } from 'clsx';
  5. import Script from 'next/script';
  6. import { Inter } from 'next/font/google';
  7. import { routing } from '@/i18n/routing';
  8. import ReloadMainScript from '@/components/ReloadMainScript';
  9. // import './globals.css';
  10. // import './index.css';
  11. import './styles.css';
  12. import '@/static/css/vendors.css';
  13. import '@/static/css/icon.css';
  14. import '@/static/css/style.css';
  15. import '@/static/css/responsive.css';
  16. import '@/static/css/visa-card.css';
  17. const inter = Inter({ subsets: ['latin'] });
  18. export function generateStaticParams() {
  19. return routing.locales.map((locale) => ({ locale }));
  20. }
  21. export async function generateMetadata(
  22. props: Omit<LayoutProps<'/[locale]'>, 'children'>
  23. ) {
  24. const { locale } = await props.params;
  25. const t = await getTranslations({
  26. locale: locale as Locale,
  27. namespace: 'LocaleLayout'
  28. });
  29. return {
  30. title: t('title')
  31. };
  32. }
  33. export default async function LocaleLayout({
  34. children,
  35. params
  36. }: LayoutProps<'/[locale]'>) {
  37. // Ensure that the incoming `locale` is valid
  38. const { locale } = await params;
  39. if (!hasLocale(routing.locales, locale)) {
  40. notFound();
  41. }
  42. // Enable static rendering
  43. setRequestLocale(locale);
  44. return (
  45. <html className="h-full" lang={locale} key={locale}>
  46. <body data-mobile-nav-style="classic" className="custom-cursor">
  47. <NextIntlClientProvider>
  48. <ReloadMainScript />
  49. {children}
  50. </NextIntlClientProvider>
  51. <>
  52. <Script id="google-tag-manager">
  53. {`(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
  54. new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
  55. j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
  56. 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  57. })(window,document,'script','dataLayer','GTM-T8P44WHV');`}
  58. </Script>
  59. <Script strategy="beforeInteractive" src="/js/jquery.js"></Script>
  60. <Script strategy="beforeInteractive" src="/js/vendors.min.js"></Script>
  61. {/* <Script
  62. key={locale}
  63. strategy="afterInteractive"
  64. src={`/js/main.js?v=${new Date()}`}
  65. ></Script> */}
  66. </>
  67. </body>
  68. </html>
  69. );
  70. }